/**
 * ---------------------------
 * Time: 2017/8/7 20:58.
 * Author: Cangshi
 * View: http://palerock.cn
 * ---------------------------
 */
define(['app', 'zepto'], function (app) {
    'use strict';
    app.service('templateService', function (MaintainTemplate, templateDao, MaintainPlan, failureHolder, ObjectUtils, DateTimeUtils) {

        /**
         * 添加模板
         * @param template
         * @param cb
         */
        this.addTemplate = function (template, cb) {

            // 初始化并审核其中属性
            var maintainTemplate = new MaintainTemplate(template);
            var errorMaintainMessages = maintainTemplate.checkPropertyFormed();
            var errorPlanMessages = MaintainPlan.checkPropertyFormed(maintainTemplate.maintainPlans);
            var errorMessages = errorMaintainMessages.concat(errorPlanMessages);
            // 若有错误则提示错误
            if (errorMessages.length > 0) {
                failureHolder.handleFailure(errorMessages, 405);
                return;
            }

            // 持久层操作
            templateDao.addTemplate(template, function (r, e) {
                if (e.code != 200) {
                    failureHolder.handleFailure(e.message, e.code);
                } else {
                    cb.call(window, e.message, r);
                }
            });
        };

        /**
         * 获取所有模板
         * @param cb
         * @param sort 排序
         */
        this.showAllTemplates = function (cb, sort) {
            templateDao.findAllTemplates(function (r, e) {
                if (e.code != 200) {
                    if (e.code == 404) {
                        cb.call(window, r, e.message);
                        return;
                    }
                    failureHolder.handleFailure(e.message, e.code);
                } else {
                    var templates = r;
                    if (sort && sort.sortBy) {
                        templates = ObjectUtils.sortingArrayByProperty(templates, sort.sortBy, sort.order);
                    }
                    cb.call(window, templates, e.message);
                }
            })
        };

        /**
         * 获取单个模板
         * @param id 模板的id
         * @param cb 回掉函数
         */
        this.getTemplate = function (id, cb) {
            var templateId = parseInt(id);
            if (id == null || Number.isNaN(templateId)) {
                failureHolder.handleFailure('模板id必须是一个数字', 403);
                return;
            }
            templateDao.findByTemplateId(id, function (r, e) {
                if (e.code != 200) {
                    failureHolder.handleFailure(e.message, e.code);
                } else {
                    cb.call(window, MaintainTemplate.toMaintainTemplate(r[0]), e.message);
                }
            })
        };

        /**
         * 根据模板id删除模板
         * @param templateId
         * @param cb
         */
        this.removeByTemplateId = function (templateId, cb) {
            templateDao.deleteByTemplateId(templateId, function (r, e) {
                if (e.code != 200) {
                    failureHolder.handleFailure(e.message, e.code);
                } else {
                    cb.call(window, e.message);
                }
            })
        }
    });
});